#include <iostream>
#include <windows.h>
#include <conio.h>
#include "Const.h"
#include "Game.h"
#include "Snake.h"
#include "Field.h"
#include "winconsole.h"

int main()
{
	int columns;//����� �������� ���� �� �����������
	int rows;//����� �������� ���� �� ���������	
	std::cout << "Enter columns: ";
	std::cin >> columns;
	std::cout << "Enter rows: ";
	std::cin >> rows;
	
	//char* p_field = new char[rows*columns]; // ������������ ������ �������� ����
	char** field = new char* [rows];
	
	for (int i = 0; i < rows; i++)
	{
		field[i] = new char [columns];
	}

	//int* snake_x_main;// ������������ ������ ��������� ������ �� �����������(X)
	//int* snake_y_main;//������������ ������ ��������� ������ �� ���������(Y)
	int snake_x_main[L]{ 0 };//������ ��������� ������ �� �����������(X)
	int snake_y_main[Y]{ 0 };//������ ��������� ������ �� ���������(Y)
	int snake_size = 1; //������� ������ ������; >0 �������� ������ + ������ ������ (���� 1 - �� ������ ������)
	int timeout = 150; //������� �������� ����� ������ ����; > 100 (ms), 1000 - ����� ����������� ���������� ��������� �� 1 �������
	int game_on = 1;//������� ����������� ����
	DIRECTION direction = turn_right;//����������� ��������
	int score = 0;

	init_game(field, columns, rows, snake_x_main, snake_y_main, direction, snake_size, timeout, game_on, score);
		
	_getch(); // �������� ������� ������

	system("cls");//������ ������� �������
		
	bool food_flag = false;//�������, ��� ��� �����������
	int food_x;//���������� ��� �� ����������� (X)
	int food_y;//���������� ��� �� ��������� (Y)


	
#define Auto
//#define Hand	
	
	while (game_on)
	{
		setCursorPosition(0, 0);
		//system("cls");//������ ������� �������
#if defined Auto
		if (_kbhit())
		{
			handle_cmd(direction, game_on);
		}
		//else { continue; }
#elif defined Hand
		handle_cmd(direction, game_on);

#else
		std::cout << "Select mode!" << std::endl;
#endif
		clear_snake(field, snake_x_main, snake_y_main, snake_size);//������ "�����"

		check_eating(snake_x_main, snake_y_main, food_y, food_x, snake_size, food_flag, score);//����������� �������� ����, ��� ������ ����� ���.

		set_food(field, columns, rows, snake_size, food_flag, food_x, food_y);//��������������� ���
				
		move_snake(snake_x_main, snake_y_main, snake_size, direction, columns, rows);//������� ��������� ������ ������ 
								
		set_snake(field, snake_x_main, snake_y_main, snake_size);//������ ��������������� � ������� ����

		print_field(field, columns, rows, score);//������
		

		game_on = check_game(field, snake_x_main, snake_y_main, snake_size, food_flag, game_on);//�������� �� ����� ����
		
		Sleep(timeout);//��������								
	}

	game_over(field, columns, rows, snake_x_main, snake_y_main, score);
	

	


	return 0;//��� ���������� ����������
}

